package org.hcf.utils.word;

import lombok.Getter;
import org.apache.poi.xwpf.usermodel.*;

import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DocxTemplateUtils {
//
//    private final Map<String, Object> params;
//    String filePath;
//    InputStream is;
//    /** 此类为poi操作word模板的工具类*/
//    @Getter
//    XWPFDocument doc;
//
//    Pattern pattern = Pattern.compile(KEY_REGEX);
//
//    public static final String KEY_REGEX =".*\\$\\{(?<mkey>[a-zA-Z0-9_]+)}.*";
//
//
//    public DocxTemplateUtils(String templateDocxFile, Map<String, Object> params) {
//        this.filePath = templateDocxFile;
//        this.params = params;
//
//        try {
//            is = new FileInputStream(filePath);
//            doc = new XWPFDocument(is);
//        } catch (FileNotFoundException e) {
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 替换段落里面的变量
//     */
//    public void replaceInPara() {
//        Iterator<XWPFParagraph> iterator = doc.getParagraphsIterator();
//        XWPFParagraph para;
//        while (iterator.hasNext()) {
//            para = iterator.next();
//            this.replaceInPara(para);
//        }
//    }
//
//    /**
//     * 替换段落里面的变量
//     */
//    public void replaceInPara(XWPFParagraph para) {
//        List<XWPFRun> runs;
//        runs = para.getRuns();
//
//        Map<Integer, String> helper = new HashMap<>();
//        for (int i = 0; i < runs.size(); i++) {
//            XWPFRun run = runs.get(i);
//            String runText = run.toString();
//            System.out.println("------>>>>>>>>>" + runText);
//            if(runText.indexOf("${")!=-1 && runText.indexOf("}")!=-1){
//                helper.put(i, runText);
//            }
//        }
//
//        for (Map.Entry<Integer, String> entry : helper.entrySet()) {
//            Integer pos = entry.getKey();
//            String str = replaceStr(entry.getValue());
//            if( Objects.nonNull(str) ){
//                replaceTextRun(para, pos, str);
//            }
//        }
//    }
//
//    public String replaceStr(String str){
//        Matcher matcher = pattern.matcher(str);
//        matcher.matches();
//        String key = matcher.group("mkey");
//        if(Objects.nonNull(params.get(key))){
//            return str.replace("${" + key + "}", String.valueOf(params.get(key)));
//        }
//        return null;
//    }
//
//
//
//    public void replaceTextRun(XWPFParagraph para, int pos, Object o){
//        XWPFRun oldRun = para.getRuns().get(pos);
//        XWPFRun newRun = para.insertNewRun(pos);
//        copy(oldRun, newRun);
//        para.removeRun(pos+1);
//        newRun.setText(o.toString());
//    }
//
//    public void copy(XWPFRun oldRun,XWPFRun newRun){
//        newRun.setColor(oldRun.getColor());
//        newRun.setCharacterSpacing(oldRun.getCharacterSpacing());
//        if(Objects.nonNull(oldRun.getEmphasisMark())){
//            newRun.setEmphasisMark(oldRun.getEmphasisMark().toString());
//        }
//        newRun.setFontFamily(oldRun.getFontFamily());
//        newRun.setFontSize(oldRun.getFontSize());
//        newRun.setKerning(oldRun.getKerning());
//        newRun.setStyle(oldRun.getStyle());
//        newRun.setUnderline(oldRun.getUnderline());
//        newRun.setUnderlineColor(oldRun.getUnderlineColor());
//        if(Objects.nonNull(oldRun.getUnderlineThemeColor())){
//            newRun.setUnderlineThemeColor(oldRun.getUnderlineThemeColor().toString());
//        }
//    }
//
//    /**
//     * 替换表格里面的变量
//     *
//     * @param doc    要替换的文档
//     * @param params 参数
//     */
//    public void replaceInTable() {
//        Iterator<XWPFTable> iterator = doc.getTablesIterator();
//        XWPFTable table;
//        List<XWPFTableRow> rows;
//        List<XWPFTableCell> cells;
//        List<XWPFParagraph> paras;
//        while (iterator.hasNext()) {
//            table = iterator.next();
//            rows = table.getRows();
//            for (XWPFTableRow row : rows) {
//                cells = row.getTableCells();
//                for (XWPFTableCell cell : cells) {
//                    paras = cell.getParagraphs();
//                    for (XWPFParagraph para : paras) {
//                        this.replaceInPara(para);
//                    }
//                }
//            }
//        }
//    }
//
//    /**
//     * 关闭输入流
//     *
//     * @param is
//     */
//    public void closeInputStream() {
//        if (is != null) {
//            try {
//                is.close();
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
//    }
//
//    /**
//     * 关闭输出流
//     *
//     * @param os
//     */
//    public void closeOutputStream(OutputStream os) {
//        if (os != null) {
//            try {
//                os.close();
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
//    }

}